package com.lingdong.onlinejudge.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lingdong.onlinejudge.model.dto.base.CaptchaDto;
import com.lingdong.onlinejudge.model.dto.base.EmailDto;
import com.lingdong.onlinejudge.model.dto.user.UserLoginByEmailDto;
import com.lingdong.onlinejudge.model.dto.user.UserLoginDto;
import com.lingdong.onlinejudge.model.dto.user.UserRegisterDto;
import com.lingdong.onlinejudge.model.entity.User;
import com.lingdong.onlinejudge.model.vo.base.CaptchaVo;
import com.lingdong.onlinejudge.model.vo.base.EmailVo;
import com.lingdong.onlinejudge.model.vo.user.UserLoginVo;
import com.lingdong.onlinejudge.model.vo.user.UserVo;

/**
 * 认证相关服务
 * @author lzw
 */
public interface AuthService extends IService<User> {

    /**
     * 用户登录
     * @param userLoginDto 用户登录信息
     * @return 结果
     */
    UserLoginVo userLogin(UserLoginDto userLoginDto);

    /**
     * 获取验证码
     * @return 验证码
     */
    CaptchaVo captcha();

    /**
     * 验证验证码
     * @param captchaDto 验证码
     * @return 结果
     */
    Boolean checkCaptcha(CaptchaDto captchaDto);

    /**
     * 发送邮箱验证码
     * @return 结果
     */
    EmailVo sendEmail(String email);

    /**
     * 用户登录 (邮箱验证码)
     * @param userLoginByEmailDto 用户登录信息
     * @return 结果
     */
    UserLoginVo userLoginByEmail(UserLoginByEmailDto userLoginByEmailDto);

    /**
     * 验证邮箱验证码
     * @param emailDto 验证码
     * @return 结果
     */
    Boolean checkEmail(EmailDto emailDto);

    /**
     * 用户注册
     * @param userRegisterDto 用户注册信息
     * @return 结果
     */
    Boolean register(UserRegisterDto userRegisterDto);

    /**
     * 获取用户信息
     * @param token 登录信息
     * @return 结果
     */
    UserVo getUserInfo(String token);

    /**
     * 退出登录
     * @return 结果
     */
    Boolean logout(String token);

}
